Pēdējā laikā kaut kā par vienu tēmu trāpās interesantas lietas.
Lūk, piemēram, kas ir diženais programmētāju princips MapReduce, kurš ļāva kompānijai Google tikt pie akciju cenas 500 dolāri par gabalu?
Tas ir ļoti vienkārši, lasām Džoelu. Viņš starp citu ir homiķis, bet mēs viņu mīlam ne jau par to (TM). Bet lūk to, ka viņš bieži pārspīlē un fantazē nekaunoties, viņam gan derētu ierakstīt mīnusos.
Viņam tur rakstīts, ka tas viss cēlies no funkcionālās programmēšanas, ko daudzi krutie programmētāji uzskata par daudz jaudīgāku un pareizāku rīku nekā mūsu dzimtās imperatīvās valodas kā C.
Es vispār Solžeņicinu neesmu lasījis, bet nepiekrītu. Varbūt funkcionālās valodas arī ir vērts zināt, bet ikdienas pielietojumam un lasāmībai tās var izmantot uz pirkstiem saskaitāmi matemātiski apkalti izstrādātāji. Es par tādiem nesen rakstīju; pats es uz to neesmu spējīgs.
Bet kas ir interesanti, tas ir tas, ka trešajā C# versijā Microsoft pievienos LINQ. Tas ir ārkārtīgi interesants un jaudīgs rīks, kurš dara daudz ko. Var pat nosaukt to par unikālu; kaut kā tāda vēl nebija.
Tas ienes iekš c# funkcionālo valodu elementus, piemēram, lambda izteiksmes. Lambda izteiksme, attiecinot uz mūsu auniem, ir tikai superīsi saīsināta funkcijas definīcija.
Piemēram, izteiksme s=> s >5 definēs funkciju
bool Func1(int s)
{
return s >5;
}
Ienes skriptu valodu elementus dinamiskas tipa noteikšanas veidā pēc piešķiramās izteiksmes
Piemēram, pēc izteiksmes
var a="text";
mainīgā a tips kļūs par string , bet vērtība - "text"
(Ak, kā šo vēl ļaunprātīgi izmantos)
Ļauj manipulēt ar datiem kolekcijās un XML, izmantojot SQL līdzīgu sintaksi (tas ir saistīts ar iespējām , kas aprakstītas augstāk)
Un pat daļēji risina Object-Relational mapping problēmu, tas ir, datu bāzes tabulas rindu un klases locekļu automātisku sasaistīšanu. Parasti to dara programmētājs, skricelējot kaudzi koda ar rokām.
Iekš LINQ pieprasījums izskatās kā sql, kas ierakstīts tieši kodā, un translējas īstā sql, kurš izpildās bāzē. Kā rezultāts automātiski tiek izveidota un atgriezta jauna klase, kurā lauki ir tabulas kolonnas bāzē. Bet rindas - tā ir šādu klašu kolekcija.
Pie visa tā der piebilst, ka LINQ satur iebūvētus Map un Reduce. Tiesa, tur tos sauc citādi. (Tie ir tie paši leģendārie MapReduce no Google, skat. augstāk.)
Tādā veidā Microsoft ne tikai kārtējo reizi nosper labas idejas, bet uzlabo tās un kaut kādā mērā pat revolucionizē.
Bet manā pilnīgi diletantiskajā skatījumā tas izraisīs šādas problēmas: lai gan vienkārša LINQ pielietošana uzlabo lasāmību un vienkāršo darbu ar datiem, LINQ izpratne un padziļināta izmantošana prasa ne mazums papildu pūļu no nesagatavotiem izstrādātājiem. Tas ir, M$ padarīja C# vēl sarežģītāku, jaudīgāku un kaut kādā mērā saputrotāku.
Bet mērķis taču bija padarīt to vienkāršu un lasāmu, vai ne? Ja viņi gribēja jaudu, vajadzēja uzreiz propagandēt un ieviest funkcionālo valodu kā OCAML vai Haskell.
Tiesa, M$ ir sava šāda valoda - F#, kura ir OCaml'a dialekts.
MapReduce, LINQ, funkcionālās valodas
2006-12-15
Bet tas ir brīnišķīgs, brīnišķīgs, brīnišķīgs rīks. Es sākšu to lietot, esmu pārliecināts. MC